-- 引入 socket 库
local os = require("os")
local inifile = require("inifile")
local socket = require("socket")  --调用socket包

local config_file = arg[1]
local init_config = inifile.parse(config_file)

local ip = init_config["RSYNC_SERVER"]["RSYNC_SERVER_IP"]    --程序设置要了解的server端的ip地址
local port = init_config["RSYNC_SERVER"]["RSYNC_SERVER_PORT"] --设置端口
local module = init_config["RSYNC_SERVER"]["RSYNC_SERVER_MODULE"]
local listen_path = init_config["RSYNC_SERVER"]["INOTIFY_LISTEN_PATH"]

local monitor_file = init_config["RSYNC_SERVER"]["RSYNC_SERVER_MONITOR_FILE_PATH"]
print(monitor_file, listen_path, module)
local inotify_cmd = string.format("bash %s %s %s", monitor_file, listen_path, module)
local monitor_file_handle = io.popen(inotify_cmd, "r")

-- 启动inoitfy-client
print("connecting")
local inotify_client = assert(socket.connect(ip, port))    --根据上边的参数连接server端，若未连接上直接报错
print("server connect ok")

-- 先执行一次全量同步
inotify_client:send("rsync -avzcR --delete --password-file=%s %s@%s::" .. module .. " %s\n")

while 1 do
    local run_cmd = monitor_file_handle:read("L")
    inotify_client:send(run_cmd)
    local s, status, partial = inotify_client:receive()    --等待服务器发送过来的信号
    print(s)
    if status == "closed" then 
        break
    end
end
 
inotify_client:close()